package main

import (
	"fmt"
	"sort"
)

/*
找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1：

输入：
[2, 3, 1, 0, 2, 5, 3]
输出：2 或 3
*/

func main() {
	var l = []int{2, 3, 1, 0, 2, 5, 3}
	l2 := findRepeatNumber(l)
	fmt.Print(l2)
}

//超出时间限制
func findRepeatNumber(nums []int) int {
	//1、双遍历，找重复值
	for i := 0; i < len(nums); i++ {
		for j := i + 1; j < len(nums); j++ {
			if nums[i] == nums[j] {
				return nums[i]
			}
		}
	}
	return -1
}

//2、存map
func findRepeatNumber1(nums []int) int {
	var mapV = make(map[int]int)
	for i := 0; i < len(nums); i++ {
		_,ok:=mapV[nums[i]]
		if ok {
			return nums[i]
		}else{
			mapV[nums[i]] = 1
		}
	}
	return -1
}

func findRepeatNumber2(nums []int) int {
	//3、排序找
	sort.Ints(nums)
	for i:=1;i< len(nums);i++{

		if nums[i] == nums[i-1]{
			return nums[i]
		}
	}
	return -1
}
